package com.apo1o.cmscore.config;
import com.apo1o.cmscore.interceptor.JwtInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Auther: Apo1o.
 * @Date: 2023/11/16-11-16-15:09
 * @Description： com.apo1o.cmscore.config
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    /**
     * (新增代码)添加jwt拦截器,并指定拦截路径
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtInterceptor())
                .addPathPatterns("/auth/**")
                //不需要被校验url: 查询所有一级栏目及其二级栏目的接口(供前台使用)
                .excludePathPatterns("/auth/category/queryAllParent",
                        "/auth/comment/queryByArticleId/{id}");
    }

    /**
     * (新增代码)创建jwt拦截器对象并加入spring容器
     */
    @Bean
    public JwtInterceptor jwtInterceptor() {
        return new JwtInterceptor();
    }

    // (原有代码)跨域配置: 通过跨域过滤器实现
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

        CorsConfiguration config = new CorsConfiguration();

        // 允许跨域的头部信息
        config.addAllowedHeader("*");
        // 允许跨域的方法
        config.addAllowedMethod("*");
        // 可访问的外部域
        config.addAllowedOrigin("*");
        // 需要跨域用户凭证（cookie、HTTP认证及客户端SSL证明等）
        //config.setAllowCredentials(true);
        //config.addAllowedOriginPattern("*");

        // 跨域路径配置
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
//
//        @Autowired
//        private JwtInterceptor jwtInterceptor;
//
//    @Override
//    public void addInterceptors(InterceptorRegistry registry) {
//        // 对swagger的请求不进行拦截
//        String[] excludePatterns = new String[]{
//                "/queryAll*",
//                "/auth/**",
//                "/animal/findById/**",
//                "/static/**/**",
//                "/profile/**",
//                "/common/download**",
//                "/common/download/resource**",
//                "/swagger-ui.html",
//                "/swagger-resources/**",
//                "/webjars/**",
//                "/*/api-docs",
//                "/favicon.ico",
//                "/doc.html",
//                "/error"
//        };
//        registry.addInterceptor(jwtInterceptor)
//                .addPathPatterns("/**")
//                .excludePathPatterns(excludePatterns)
//               .excludePathPatterns("/login")
//                .excludePathPatterns("/nologin/**/*");
//
//
//    }
//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        //根据HTTP协议规定的预检请求的返回头信息进行设置
//        registry.addMapping("/**")// 映射所有路径
//                .allowedOrigins("*")// 运行所有客户端访问
//                //不允许携带cookie
//                .allowCredentials(false)
//                //支持的方法
//                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
//                //运行所有请求头字段
//                .allowedHeaders("*")
//                //允许客户端缓存“预检请求”中获取的信息，3600秒
//                .maxAge(3600);
//    }
    }

